// pages/apply/apply.js
const app = getApp()
import api from '../../config/api'
import path from '../../config/path'
const bubbleMixin = require('../../utils/page-mixin');

Page({
  ...bubbleMixin,
  data: {
    activeTab: 'appointment',
    appointmentList: [],
    applyList: [],
    loading: false,
    userRole: 0,
    userInfo: null
  },

  onLoad() {
    this.initUserInfo()
    this.loadData()
  },

  onShow() {
    this.initUserInfo()
    this.loadData()
  },

  // 初始化用户信息
  initUserInfo() {
    const userInfo = wx.getStorageSync('userInfo')
    if (userInfo) {
      this.setData({
        userInfo: userInfo,
        userRole: userInfo.role || 0
      })
    }
  },

  // 切换Tab
  switchTab(e) {
    const tab = e.currentTarget.dataset.tab
    this.setData({
      activeTab: tab
    })
  },

  // 加载数据
  loadData() {
    if (!this.data.userInfo) {
      return
    }
    this.loadAppointments()
    this.loadApplies()
  },

  // 构建请求参数
  buildPayload() {
    if (!this.data.userInfo) {
      return null
    }
    
    const payload = { 
      pageNo: 1, 
      pageSize: 100 
    }
    
    return payload
  },

  // 加载看房预约
  async loadAppointments() {
    const payload = this.buildPayload()
    if (!payload) return
    
    this.setData({ loading: true })
    
    try {
      // 根据角色选择不同的API路径
      const apiPath = this.data.userRole === 1 ? 
        path.path.getLandlordAppointments : 
        path.path.getMyAppointments
      
      const res = await api.get('apply', apiPath, payload)
      
      if (res.code === 200) {
        const appointments = (res.data.records || []).map(item => {
          return {
            ...item,
            type: 'appointment',
            // 由于数据中没有房源标题，我们显示房源ID
            houseTitle: `房源 #${item.houseId}`,
            contactName: '用户',
            phone: item.contactPhone || '未填写',
            appointmentTime: this.formatAppointmentTime(item.appointmentTime),
            createTime: item.createTime, // 确保创建时间字段存在
            // 添加开始时间和结束时间（预约通常只有预约时间）
            startTime: item.appointmentTime, // 预约时间作为开始时间
            endTime: item.appointmentTime    // 预约时间作为结束时间
          }
        })
        
        this.setData({
          appointmentList: appointments
        })
      } else {
        throw new Error(res.message || '加载预约列表失败')
      }
    } catch (err) {
      console.error('加载看房预约失败:', err)
      wx.showToast({
        title: '加载预约列表失败',
        icon: 'none'
      })
    } finally {
      this.setData({ loading: false })
    }
  },

  // 加载房源申请
  async loadApplies() {
    const payload = this.buildPayload()
    if (!payload) return
    
    this.setData({ loading: true })
    
    try {
      // 根据角色选择不同的API路径
      const apiPath = this.data.userRole === 1 ? 
        path.path.getLandlordApplies : 
        path.path.getMyApplies
      
      const res = await api.get('apply', apiPath, payload)
      
      if (res.code === 200) {
        const applies = (res.data.records || []).map(item => {
          return {
            ...item,
            type: 'apply',
            // 由于数据中没有房源标题，我们显示房源ID
            houseTitle: `房源 #${item.houseId}`,
            contactName: '用户',
            phone: item.contactPhone || '未填写',
            // 确保租期时间字段存在
            rentStartTime: item.rentStartTime,
            rentEndTime: item.rentEndTime,
            createTime: item.createTime, // 确保创建时间字段存在
            // 添加开始时间和结束时间的别名，确保兼容性
            startTime: item.rentStartTime,
            endTime: item.rentEndTime
          }
        })
        
        this.setData({
          applyList: applies
        })
      } else {
        throw new Error(res.message || '加载申请列表失败')
      }
    } catch (err) {
      console.error('加载房源申请失败:', err)
      wx.showToast({
        title: '加载申请列表失败',
        icon: 'none'
      })
    } finally {
      this.setData({ loading: false })
    }
  },

  // 查看详情
  viewDetail(e) {
    const { type, id } = e.currentTarget.dataset
    if (!id) {
      wx.showToast({
        title: '数据错误',
        icon: 'none'
      })
      return
    }
    
    if (type === 'appointment') {
      wx.navigateTo({
        url: `/pages/apply/handle/handleViewApply?id=${id}`
      })
    } else {
      wx.navigateTo({
        url: `/pages/apply/handle/handleRentApply?id=${id}`
      })
    }
  },

  // 获取状态文本
  getStatusText(status) {
    const statusMap = {
      0: '待处理',
      1: '已同意', 
      2: '已拒绝',
      3: '已取消',
      4: '已完成',
      5: '已过期'
    }
    return statusMap[status] || '未知状态'
  },

  // 格式化预约时间
  formatAppointmentTime(timeStr) {
    if (!timeStr) return '待确认'
    
    try {
      const date = new Date(timeStr)
      
      // 格式化日期和时间
      const year = date.getFullYear()
      const month = (date.getMonth() + 1).toString().padStart(2, '0')
      const day = date.getDate().toString().padStart(2, '0')
      const hours = date.getHours().toString().padStart(2, '0')
      const minutes = date.getMinutes().toString().padStart(2, '0')
      
      return `${year}-${month}-${day} ${hours}:${minutes}`
    } catch (error) {
      return timeStr
    }
  },

  // 格式化时间（详细）
  formatTime(timeStr) {
    if (!timeStr) return ''
    try {
      const date = new Date(timeStr)
      
      const year = date.getFullYear()
      const month = (date.getMonth() + 1).toString().padStart(2, '0')
      const day = date.getDate().toString().padStart(2, '0')
      const hours = date.getHours().toString().padStart(2, '0')
      const minutes = date.getMinutes().toString().padStart(2, '0')
      
      return `${year}-${month}-${day} ${hours}:${minutes}`
    } catch (error) {
      return timeStr
    }
  },

  // 格式化日期（只显示日期）
  formatDate(dateStr) {
    if (!dateStr) return '未设置'
    try {
      const date = new Date(dateStr)
      return date.getFullYear() + '-' + 
             (date.getMonth() + 1).toString().padStart(2, '0') + '-' + 
             date.getDate().toString().padStart(2, '0')
    } catch (error) {
      return dateStr
    }
  },

  // 下拉刷新
  onPullDownRefresh() {
    this.loadData()
    setTimeout(() => {
      wx.stopPullDownRefresh()
    }, 1000)
  }
})